{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAGstJREFUeJzt3X2MXNdZx/Hvk/W23QTKNs22StY1TqXI5sUkblclYKlqHIpbGiWWKZDQQoCiCFFBKWBqCwQUtdjIoBb+oMi0QFBKmpCkTksBE8WpkCKcao3TumljEtrG9jrUixIXkSzN2nn4Y+5k17t3Zu7MfTv33N9Hsnbn7uzsmbve557znOeca+6OiIjE66K6GyAiIuVSoBcRiZwCvYhI5BToRUQip0AvIhI5BXoRkcgp0IuIRE6BXkQkcgr0IiKRW1N3AwAuu+wyX79+fd3NEBFplCNHjvy3u08Nel4QgX79+vXMzs7W3QwRkUYxs6eyPE+pGxGRyA0M9Gb2V2Z2xsy+vOzYPjN73My+ZGafNrPJZV/bbWZPmtlxM9tWVsNFRCSbLD36vwHetuLYA8D3u/sPAP8B7AYws+8Fbga+L/mePzezscJaKyIiQxsY6N39X4FnVhz7F3c/lzw8DKxNPr8J+JS7f9vdvw48CbypwPaKiMiQisjR/wLwT8nn08DJZV87lRwTEZGa5Kq6MbPfBs4Bn+weSnla6p1NzOw24DaAdevW5WmGiMhQDhydY9/B45w+u8AVkxPs3LaB7Zvj7ZOO3KM3s1uBG4B3+dJtqk4Br1v2tLXA6bTvd/f97j7j7jNTUwPLQEVECnHg6By77zvG3NkFHJg7u8Du+45x4Ohc3U0rzUiB3szeBnwAuNHdn1/2pc8AN5vZy83sSuAq4Av5mykiUox9B4+zsHj+gmMLi+fZd/B4TS0q38DUjZndCbwFuMzMTgG/R6fK5uXAA2YGcNjdf8ndHzOzu4Gv0EnpvNfdz6e/sohI9U6fXRjqeAwGBnp3vyXl8Cf6PP/DwIfzNEpEpCxXTE4wlxLUr5icqKE11dDKWBFplZ3bNjAxfuHynonxMXZu21BTi8oXxF43IiJV6VbXtKnqRoFeRFpn++bpqAP7Sgr0ItIobauBL4ICvYg0RrcGvlse2a2BB4II9qFehDQZKyKNEXINfMgLsRToRaQxQq6BD/kipEAvIo3Rq9Y9hBr4kC9CCvQi0hgh18CHfBFSoBeRxti+eZo9OzYxPTmBAdOTE+zZsSmICc+QL0KquhGRRgm1Bj7khVgK9CIiBQn1IqTUjYhI5BToRUQip0AvIhI5BXoRkcgp0IuIRE6BXkQkcgr0IiKRU6AXEYmcAr2ISOQU6EVEIqdALyISOQV6EZHIKdCLiEROgV5EJHIK9CIikVOgFxGJnG48IiJSgwNH5yq7G5UCvYhIxQ4cnWP3fcdYWDwPwNzZBXbfdwyglGCv1I2ISMX2HTz+UpDvWlg8z76Dx0v5eQr0IiIVO312YajjeSnQi4hU7IrJiaGO56VALyJSsZ3bNjAxPnbBsYnxMXZu21DKz9NkrIhIxboTrqq6ERGJ2PbN06UF9pWUuhERidzAQG9mf2VmZ8zsy8uOXWpmD5jZE8nHVyXHzcz+zMyeNLMvmdkbymy8iIgMlqVH/zfA21Yc2wU86O5XAQ8mjwHeDlyV/LsN+FgxzRQRkVENDPTu/q/AMysO3wTcnnx+O7B92fG/9Y7DwKSZXV5UY0VEZHijTsa+1t2fBnD3p83sNcnxaeDksuedSo49PXoTRaRuVe7LIsUruurGUo556hPNbqOT3mHdunUFN0NEilL1vixSvFGrbr7ZTckkH88kx08Br1v2vLXA6bQXcPf97j7j7jNTU1MjNkNEylb1vixNc+DoHFv2HuLKXZ9jy95DHDg6V3eTVhk10H8GuDX5/Fbg/mXHfzapvrkW+FY3xSMizVT1vixN0h3tzJ1dwFka7YQW7LOUV94J/BuwwcxOmdl7gL3AW83sCeCtyWOAfwS+BjwJ/CXwy6W0WkQqU9S+LE3o+Q6rKaOdgTl6d7+lx5euT3muA+/N2ygRCcfObRsuyNFDZzJu7uwCW/YeyjQxG2uevymjHa2MFZG+tm+eZs+OTUwnPXhjqcIia6qiKT3fYVW9C+WoFOhFZKDtm6d5eNdWpicnVpXRZQnYTen5DqvqXShHpU3NRCTV7xw4xp2PnOS8O2Nm3PKDrxs5YF8xOcFcynOK6PnWWeNf9S6Uo1KgF5FVfufAMe44fOKlx+fduePwCS4ev4jnF19c9fxBATstz19EzzeE3H+Vu1COSqkbEVnlzkdOph5fOPfiSKmK5Xl+A6YnJ9izY1PuABlr7r9o6tGLyCrnPXVBO+6wZ8emkVIVZfR8Y839F02BXkRWGTNLDfZjZkGlKrLk/rVPj1I3IpLilh983VDH6zKo6qUpK1fLpkAvIqt8aPsm3n3tOsass0/hmBnvvnYdH9q+qeaWXWhQ7l85/A7zHrm4Ks3MzPjs7GzdzRCRyFy563Op2+ca8PW976i6OYUzsyPuPjPoeerRi0i0mrJytWwK9CLSU9M3ImvKytWyqepGRFKFsBgpr6asXC2bAr2IpOo3kdmkQBlSOWhdFOilVVRTnZ0WI8VDOXppDdVUD0cTmfFQoJfWUE31cDSRGQ+lbqQ1lIoYjiYy46FAL61R5p7osdJEZhyUupHWiCkV0fT6dqmWevTSGrGkImKob5dqKdBLq8SQimhSfbvKWcOgQC+N17Zg0pRJ5SJHHm37HRdNgV4aLdY0Rr/A1pRJ5aJGHrH+jqukyVhptBhr4wct7EqbVDbguo1T1Te2j6JGHjH+jqumQC+NFmoaI09VzKDAtn3zND/+xmls2dcduPfI3FA/p+zKnaJW1ob6O24SpW6k0epOY6SlWIBcqYYsge2hx+dX3VBjmLRIFemQnds2XPAzYLRy1rp/xzFQj14arc7a+F4plg9+9rFcqYYsPeG8vdwq0iGDbvOXVUzrH+qiHr00Wp218b2C5cpjXVmDcJaecN5eblXpkCLKWav6Hcdc2aNAL41XV238sEHxIjOu3PW5gUEkS2DLmxZpWjqk7N9x7JU9CvQShTp6Y72C5eTEOM+9cI7F8xdm0c9753GWIDIosOXt5fa6UFy3cYotew9F2avtp0mL0EahQC+NV1dvrFewvOHqy7nrCyf7fm8RQWTlxaBbRZMlSKddKK7bOMW9R+ai7dX2E3tljwK9NF5dvbFevep9B4+z+OLKmpjVigwio1zsVl4otuw9FHWvtp+mpbKGpUAvjVdnbywtxfL+ux7N9L1FBpEiLnax92r7KaoUNFQqr5TGC+2Wd1l+btFBpIggPXnxeOrxWHq1/RRVChoq9eil8ULrjV23cYo7Dp9YdXxi/CL+b/HFUiY586YeDhyd43//79yq4+NjFk2vdpAYdjbtJVegN7P3A79IZwX2MeDngcuBTwGXAv8O/Iy7v5CznSI9hbbP/EOPz6cev/SSl/Pwrq2l/My8F7te8wqXvGxNtMGvTUYO9GY2Dfwq8L3uvmBmdwM3Az8GfMTdP2VmfwG8B/hYIa2VyjRt8UhIvbE6ct15L3a92nZ2YbGwNkp98qZu1gATZrYIXAw8DWwFfjr5+u3A76NA3yixLx4pWxFplFECdtaLXdrr92qzJc/X773ZRp6Mdfc54I+BE3QC/LeAI8BZd+8m+04B+h/SMGXugxLavU7LaE+evVkGbVE86HsHvZder3/dxqkLdsPsctB2wBEYOdCb2auAm4ArgSuAS4C3pzw1taDYzG4zs1kzm52fT89pSj3KSj3kCWJlKKs9eSo4Rr3IZn0vvV4/bTfMrjaUV8YuT+rmR4Cvu/s8gJndB/wwMGlma5Je/VrgdNo3u/t+YD/AzMzM4NUlUpmyFo+Etsy8zPaMOmcw6kW213v54GcfuyBNk/Z77b7+dOSLhtosTx39CeBaM7vYzAy4HvgK8BDwzuQ5twL352uiVK2sbWFDW5ATWntg9DUBvdr87POLF/Ty09Iz3dfP+3svMg0WWoqv6fLk6B8B7qFTQnksea39wAeAXzezJ4FXA58ooJ1SobIWjzRlYVOdPdhRg23WNjusCvbd18/zey8yDRZaii8G5l5/1mRmZsZnZ2frboaUbGU1D3SCTF0rEENrz/J2DVt1k/Ze+pmenCi0dHbL3kOpaZ/pyYmh1w4U+VqxM7Mj7j4z6HlaGSuVGVTrXXXtfmgLrZa3a9g2pL2X5759LrUOvoyAWWQaLMSUWtMp0EulegWxumr3Q1polVfatsVVbQ1R5AR+7DtJ1kGbmkkQqriHadtUuVFXkRP4ukds8dSjlyCEPFyvIqVU1s8oY8TSr61FvIdQU2pNpslYCUKoE3BVTNiGOimcJktbm7ZPUpNlnYxV6kaCEOpwvYqUUpPSVoPaqtLIMCl1I0EYZbheRc+xipRSk9JW/VbWQnirn6VDgV6CMUw+uaoqnTIqQFYGz++aGE8tg6y7yiTtHBvpm1d12xryRavNlLqRRqoq3VF0SikttfHcC+cYv+jC9aqhpq36rayFMFcbiwK9NFRVPceiSxTTgufieec7XrEmuPuV9jqXDj3bGupcS9spdSONVFRKJUuef1BKaZi5gp53cnp+kaO/+6NDtb1svc5xv0oolUaGSYFeGqmIG4L3yvPPPvUMDz0+nylQDTtX0KRVn6Oe45hWG8dCgV4aqYieY688/ycPn3hpwnFQ4B62ymSY4FlEVVGe11DvPB4K9NJYeXuO/XLQy/UL3MPOFWQNnkVUFRXxGuqdx0GBXlqrX134Sr0C9yipmCzBs4h69NBq2rVitj6qugmc7rRTnrQKkX53YMr6Gt1UTJ7fXRFVRSHVtGvFbL3Uow9YXVv3tkVaGuW6jVPce2Qu8wRkr1QMsOp39/67HmX2qWeY+e5LB/Zsi5i0DWniN7TRRdso0AdMfxzlS0ujZAnEg15jy95DqYuN7jh8gru+cJLFFzszAb0u3kVUFRXxGkUJaXTRRgr0AdMfRz2KmIDs9zvqBvmutIt3v0nbrLnukKpmQhpdtJECfcD0x9Fcw0z0QvqFIe2CM2w6L5SqmZBGF22kydiAaTl5c+3ctqHnxG6arBfvJm1pvFyVd7uS1dSjD0jakHzPjk1BDL1lONs3TzP71DMXLL4CGB8z8AvTN8NcvJuczgtldNFGCvSB6DUk37NjU613WJLRfWj7ptSJXRg9b650noxCgT4QqrApXlELdPJuI9BvonRYynXLKBToA9HkIXmIilqDENpahpAqaaQ5FOgDEeOQvM4l70WNkEIcaSnXLcNSoA9EbEPyQT3hIi8Caa9V1AhJIy2JgQJ9IGIbkg8qAywqHdLrglLUfVhjHGlJ+yjQBySmIXm/nnCR6ZBer/WK8YuYGB/LPUKKbaQl7aQFU1KKfjeJLjId0u/WfEUs0Al1oY92NZVhqEcvpejXE9538Hhh6ZB+qZWiRkhVj7QGzV+EVgkk4VOPXkrRrydc5NYOsW0TkWXf9qZugyD1UY9eSjNosVARE89tmsTuvqdYK4F0B6ryKNC3SEh/SEWkQ1a+n4/81DWNDwxZgniMlUBKR5VLgb4lhvlDKuOCUHTd/Ac/+xjPPr9UPhlLYMgSxGOsBApxYVpMlKNviax53TLu7Vnka3Zfa3mQ74ohT51lziHUSqA8Yk1HhUI9+pbI8od04Ogcv3H3Fznvg++ANIyy6+aXqzIwlDHyyTrnENOaC4gzHRWSXIHezCaBjwPfT+eWmL8AHAfuAtYD3wB+0t2fzdVKyW3QH1K3p7wyyHflCaBV1M13VRUYyswpxxbEs4gxHRWSvKmbPwX+2d03AlcDXwV2AQ+6+1XAg8ljqdmglMCgnnKeANpv8VRRrwXVBgaVOBYrxnRUSEbu0ZvZK4E3Az8H4O4vAC+Y2U3AW5Kn3Q58HvhAnkZKfoNSAv16ymkBdJi0xc5tG9h5zxdZPL80Whgfs5Hr5lf2/AAmJ8b5/Ru/r7LAoJxy8do4kqlKntTN64F54K/N7GrgCPA+4LXu/jSAuz9tZq/J30wpQr8/pF6pnTGzVT2rkdIWKzNC6RmigUKpm8+SUw6pnFXaLU/qZg3wBuBj7r4ZeI4h0jRmdpuZzZrZ7Pz8fI5mSBF6pXb+5CevXhWchk1b7Dt4/IJ7pELnnqlZ0xwr93UBeHjXVr6+9x08vGtrLcFzUCqsjOolkVHlCfSngFPu/kjy+B46gf+bZnY5QPLxTNo3u/t+d59x95mpqakczZAiDJMjHTZtkSfNEWrAHHS+lMOXkIycunH3/zKzk2a2wd2PA9cDX0n+3QrsTT7eX0hLpXRZc6TDlsKNWjpXVrlnUfqdL+XwJSR5q25+BfikmX0JuAb4QzoB/q1m9gTw1uSxRGTYjcRG2XiszHLPQYrYArjISiORvHLV0bv7o8BMypeuz/O6Eqblk4uTF4/z8jUX8a2FxYETjaNMoJZZ7tlPUfXxqguXkGhlrGSyMgA++/wiE+NjmTcSG7Z0bthyz6IUtYo3lOogEVCgb5y6Svaq3nRqmHLPIhWZW1dduIRCm5o1SNGbgw2Th656cnGYcs8iKbcuMVKgb5CiSvZGuWBUHQCLWBI/yqRqbHesEgGlbhqlqF71KGmYOiYX86Q+Rp1UVW5dYqRA3yBFbeU6ygUjawAMZdl/njkF5dYlNo0N9KEElCoV1ase9YIxKACGdDs4LVgSWdLIHH2oy+LLVtRWrmXloUNa9q9JVZEljezRt+3+ksOOXgY9v6w8dF296LT3qwVLIksaGejbNCwfNh2S9fll5KHruB1cr/e7Z8cm9uzY1Lr0nkiaRgb6Nt1fctjRS52jnTp60f3eb11bGIuEppE5+jbVOle5JXBeWecQitg0rKtNozuRUTWyR9+mWueqtgQuStWVOXW/X5EmaGSgh+bVOmedUF35vOs2TnHvkbnM6ZDQJyGLTi2F/n5FQtDYQN8kWXuxac+798gcP/7GaR56fD7T6CX00U7RqZbQ369ICBToK5C1F9vreQ89Ps/Du7Zm/nkhj3bKSLWE/H5FQtDIydimydqLbcPEYpsm0kVCoR59BbL2YtswsVh1qqWNW2WIrKRAX4GsE4ZtmVisKtUS0t47InVS6qYCWevLi9rLRjpC2ntHpE7q0Vckay9WE4vFacOch0gW6tFLtLSDpUiHAr1ESxU+Ih1K3Ui0tJhKpEOBPgAqASyP5jxEFOhrpxJAESmbAn3Nmna3rLRN17LuwyMi9VCgr1mTSgDTRh93HD7x0tc1GhEJk6puatakEsC00cdKWpAkEh4F+po1qQQw6ygjxNGISJsp0NesSdseZB1lhDgaEWkz5egD0JQSwLRN11YKdTQi0mbq0UtmaaOPd1+7rhGjEZE2U49ehtKU0YeILFGgj5BW2orIcgr0kdFKWxFZKXeO3szGzOyomf1D8vhKM3vEzJ4ws7vM7GX5mylZ6WYbIrJSEZOx7wO+uuzxHwEfcfergGeB9xTwMySjJq20FZFq5Ar0ZrYWeAfw8eSxAVuBe5Kn3A5sz/MzZDhNWmkrItXI26P/KPBbwIvJ41cDZ939XPL4FKDEcIWatNJWRKoxcqA3sxuAM+5+ZPnhlKd6j++/zcxmzWx2fn5+1GbICk1aaSsi1chTdbMFuNHMfgx4BfBKOj38STNbk/Tq1wKn077Z3fcD+wFmZmZSLwYyGtW6i8hyI/fo3X23u6919/XAzcAhd38X8BDwzuRptwL3526liIiMrIwtED4A/LqZPUknZ/+JEn6GiIhkVMiCKXf/PPD55POvAW8q4nVFRCQ/bWomIhI5BXoRkcgp0IuIRE6BXkQkcgr0IiKRU6AXEYmcAr2ISOQU6EVEIqdALyISOQV6EZHIKdCLiERONwev2YGjc+w7eJzTZxe4YnKCnds2aIthESmUAn2NDhydY/d9x166mffc2QV233cMQMFeRAqj1E2N9h08/lKQ71pYPM++g8drapGIxEiBvkanzy4MdVxEZBQK9DW6YnJiqOMiIqNQoK/Rzm0bmBgfu+DYxPgYO7dtqKlFIhIjTcbWqDvhqqobESmTAn3Ntm+eVmAXkVIpdSMiEjkFehGRyCnQi4hEToFeRCRyCvQiIpEzd6+7DZjZPPBU3e3I4TLgv+tuREB0PpboXCzRuVhS1Ln4bnefGvSkIAJ905nZrLvP1N2OUOh8LNG5WKJzsaTqc6HUjYhI5BToRUQip0BfjP11NyAwOh9LdC6W6FwsqfRcKEcvIhI59ehFRCKnQD8kM3uFmX3BzL5oZo+Z2QeT41ea2SNm9oSZ3WVmL6u7rVUxszEzO2pm/5A8buW5MLNvmNkxM3vUzGaTY5ea2QPJuXjAzF5VdzurYmaTZnaPmT1uZl81sx9q4/kwsw3J/4nuv/8xs1+r8lwo0A/v28BWd78auAZ4m5ldC/wR8BF3vwp4FnhPjW2s2vuAry573OZzcZ27X7OsdG4X8GByLh5MHrfFnwL/7O4bgavp/B9p3flw9+PJ/4lrgDcCzwOfpsJzoUA/JO/43+ThePLPga3APcnx24HtNTSvcma2FngH8PHksdHSc9HDTXTOAbToXJjZK4E3A58AcPcX3P0sLT0fy1wP/Ke7P0WF50KBfgRJquJR4AzwAPCfwFl3P5c85RTQlk3mPwr8FvBi8vjVtPdcOPAvZnbEzG5Ljr3W3Z8GSD6+prbWVev1wDzw10la7+NmdgntPR9dNwN3Jp9Xdi4U6Efg7ueTYdha4E3A96Q9rdpWVc/MbgDOuPuR5YdTnhr9uUhscfc3AG8H3mtmb667QTVaA7wB+Ji7bwaeowVpmn6Suaobgb+v+mcr0OeQDEU/D1wLTJpZ945da4HTdbWrQluAG83sG8Cn6KRsPko7zwXufjr5eIZODvZNwDfN7HKA5OOZ+lpYqVPAKXd/JHl8D53A39bzAZ0OwL+7+zeTx5WdCwX6IZnZlJlNJp9PAD9CZ5LpIeCdydNuBe6vp4XVcffd7r7W3dfTGZIecvd30cJzYWaXmNl3dj8HfhT4MvAZOucAWnIuANz9v4CTZta90/31wFdo6flI3MJS2gYqPBdaMDUkM/sBOhMnY3QulHe7+x+Y2evp9GovBY4C73b3b9fX0mqZ2VuA33T3G9p4LpL3/Onk4Rrg79z9w2b2auBuYB1wAvgJd3+mpmZWysyuoTNJ/zLga8DPk/zN0LLzYWYXAyeB17v7t5Jjlf3fUKAXEYmcUjciIpFToBcRiZwCvYhI5BToRUQip0AvIhI5BXoRkcgp0IuIRE6BXkQkcv8P16YYQ+8fCuoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 载入数据\n",
    "data = np.genfromtxt(\"data.csv\", delimiter=\",\")  # 横纵坐标以 ',' 分割\n",
    "x_data = data[:,0]  # 取值所有行，第0列\n",
    "y_data = data[:,1]\n",
    "plt.scatter(x_data,y_data)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 学习率learning rate\n",
    "lr = 0.0001\n",
    "# 截距\n",
    "b = 0 \n",
    "# 斜率\n",
    "k = 0 \n",
    "# 最大迭代次数\n",
    "epochs = 50\n",
    "\n",
    "# 最小二乘法\n",
    "# 计算返回J（θ0，θ1），就是代价函数\n",
    "def compute_error(b, k, x_data, y_data):\n",
    "    totalError = 0\n",
    "    for i in range(0, len(x_data)):\n",
    "        # 真实值减去预测值，然后平方，然后累加计算损失函数，\n",
    "        totalError += (y_data[i] - (k * x_data[i] + b)) ** 2\n",
    "        # 再除以2m，m为个数\n",
    "    return totalError / float(len(x_data)) / 2.0\n",
    "\n",
    "\n",
    "# 计算θ0和θ1，这里就是b截距和k斜率\n",
    "def gradient_descent_runner(x_data, y_data, b, k, lr, epochs):\n",
    "    # 计算总数据量\n",
    "    m = float(len(x_data))\n",
    "    # 循环epochs次\n",
    "    for i in range(epochs):\n",
    "        # 临时数据\n",
    "        b_grad = 0\n",
    "        k_grad = 0\n",
    "        # 计算梯度的总和再求平均（关键），对θ0（b）和θ1（k）分别求导\n",
    "        # θ0： （h（x）-y）/m ，θ1： （h（x）-y）x/m ，h（x）=kx+b\n",
    "        for j in range(0, len(x_data)):\n",
    "            b_grad += (1/m) * (((k * x_data[j]) + b) - y_data[j])\n",
    "            k_grad += (1/m) * x_data[j] * (((k * x_data[j]) + b) - y_data[j])\n",
    "        # 更新b和k，下面就是梯度下降法公示，θ = θ-αb_grad（偏导）\n",
    "        b = b - (lr * b_grad)\n",
    "        k = k - (lr * k_grad)\n",
    "        # 每迭代5次，输出一次图像\n",
    "#         if i % 5==0:\n",
    "#             print(\"epochs:\",i)\n",
    "#             plt.plot(x_data, y_data, 'b.')\n",
    "#             plt.plot(x_data, k*x_data + b, 'r')\n",
    "#             plt.show()\n",
    "    return b, k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Starting b = 0, k = 0, error = 2782.5539172416056\n",
      "Running...\n",
      "After 50 iterations b = 0.030569950649287983, k = 1.4788903781318357, error = 56.32488184238028\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# error是代价函数的值\n",
    "print(\"Starting b = {0}, k = {1}, error = {2}\".format(b, k, compute_error(b, k, x_data, y_data)))\n",
    "print(\"Running...\")\n",
    "b, k = gradient_descent_runner(x_data, y_data, b, k, lr, epochs)\n",
    "print(\"After {0} iterations b = {1}, k = {2}, error = {3}\".format(epochs, b, k, compute_error(b, k, x_data, y_data)))\n",
    "\n",
    "# 画图\n",
    "plt.plot(x_data, y_data, 'b.')  # xy以点的形式画出，颜色蓝色\n",
    "plt.plot(x_data, k*x_data + b, 'r')  # 划线，红色\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 学习率learning rate\n",
    "lr = 0.0001\n",
    "# 截距\n",
    "b = 0 \n",
    "# 斜率\n",
    "k = 0 \n",
    "# 最大迭代次数\n",
    "epochs = 50\n",
    "\n",
    "# 最小二乘法\n",
    "# 计算返回J（θ0，θ1），就是代价函数\n",
    "def compute_error(b, k, x_data, y_data):\n",
    "    totalError = 0\n",
    "    for i in range(0, len(x_data)):\n",
    "        # 真实值减去预测值，然后平方，然后累加计算损失函数，\n",
    "        totalError += (y_data[i] - (k * x_data[i] + b)) ** 2\n",
    "        # 再除以2m，m为个数\n",
    "    return totalError / float(len(x_data)) / 2.0\n",
    "\n",
    "\n",
    "# 计算θ0和θ1，这里就是b截距和k斜率\n",
    "def gradient_descent_runner(x_data, y_data, b, k, lr, epochs):\n",
    "    # 计算总数据量\n",
    "    m = float(len(x_data))\n",
    "    # 循环epochs次\n",
    "    for i in range(epochs):\n",
    "        # 临时数据\n",
    "        b_grad = 0\n",
    "        k_grad = 0\n",
    "        # 计算梯度的总和再求平均（关键），对θ0（b）和θ1（k）分别求导\n",
    "        # θ0： （h（x）-y）/m ，θ1： （h（x）-y）x/m ，h（x）=kx+b\n",
    "        for j in range(0, len(x_data)):\n",
    "            b_grad += (1/m) * (((k * x_data[j]) + b) - y_data[j])\n",
    "            k_grad += (1/m) * x_data[j] * (((k * x_data[j]) + b) - y_data[j])\n",
    "        # 更新b和k，下面就是梯度下降法公示，θ = θ-αb_grad（偏导）\n",
    "        b = b - (lr * b_grad)\n",
    "        k = k - (lr * k_grad)\n",
    "        # 每迭代5次，输出一次图像。可以看到优化的过程\n",
    "        if i % 5 == 0:\n",
    "            print(\"epochs:\",i) # 打印迭代次数\n",
    "            plt.plot(x_data, y_data, 'b.')\n",
    "            plt.plot(x_data, k*x_data + b, 'r')\n",
    "            plt.show()\n",
    "    return b, k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Starting b = 0, k = 0, error = 2782.5539172416056\n",
      "Running...\n",
      "epochs: 0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 5\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 10\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHUlJREFUeJzt3X+QHOV95/H3VxISiB8lCQQBFFmQUHAkNjIoFCP7uMVSAAMBVxlcEAOyDlskZfwDxwmIH3UcOpAoJ4e4MpiSMUbncsAg7IIC7KCSWUJKY1wScOBgOGQwIEGQBBKHhb1Cq+f+eHrY0W7P7sz0r6d7Pq8q1ez09k4/26P9zNPffvppc84hIiLVNa7oBoiISLYU9CIiFaegFxGpOAW9iEjFKehFRCpOQS8iUnEKehGRilPQi4hUnIJeRKTiJhTdAICDDjrIzZo1q+hmiIiUyvr167c656aPtV4QQT9r1izWrVtXdDNERErFzF5tZz2VbkREKm7MoDezO81ss5n9qmnZt8zsBTN71sx+YmZTmr632Mw2mNmLZnZaVg0XEZH2tNOjvws4fdiy1cCfO+c+BvxfYDGAmR0LnA/8WfQzt5nZ+NRaKyIiHRsz6J1z/wq8M2zZo865XdHTXwAzoq/PAe5xzg04514BNgAnptheERHpUBo1+v8K/DT6+nDg9abvbYyWiYhIQRIFvZldDewCfthYFLNa7J1NzGyRma0zs3VbtmxJ0gwRERlF10FvZguAs4DPu6HbVG0E/rhptRnAG3E/75xb4Zyb45ybM336mMNARURSVa/D0qX+seq6GkdvZqcDVwD/xTn3ftO3HgT+2cz+J3AYcBTwy8StFBFJUb0O8+bBzp0wcSKsWQO1WtGtyk47wyvvBurA0Wa20cwuAb4N7A+sNrNnzOx2AOfcvwP3As8DPwO+7JwbzKz1IiJd6O/3IT846B/7+4tuUbbG7NE75y6IWfy9Uda/AbghSaNERLLU1+d78o0efV9f0S3KVhBTIIiI5KlW8+Wa/n4f8lUu24CCXkR6VK1W/YBv0Fw3IiIVp6AXEak4Bb2IlE4vjYFPg2r0IlIqoY+Br9fDO8mroBeRUokbAx9KoIb6IaTSjYiUSmMM/Pjx4Y2BD/VCLPXoRaRUQh4DH+qFWAp6ESmdUMfAh/ohpKAXEUlRiB9CqtGLiFScgl5EpOIU9CIiFaegFxGpOAW9iEjFKehFRCpOQS8iUnEKehGRilPQi4hUnIJeRKTiFPQiIhWnoBcRqTgFvYhIxSnoRUQqTkEvIlJxCnoRkYpT0IuIVJyCXkSk4hT0IiIFqddh6VL/mCXdM1ZEpAD1OsybBzt3wsSJ/qbiWd1rVj16EZEC9Pf7kB8c9I/9/dltS0EvIlKAvj7fkx8/3j/29WW3LZVuREQKUKv5ck1/vw/5rMo2oKAXESlMrZZtwDeodCMiUnEKehGRihsz6M3sTjPbbGa/alo2zcxWm9lL0ePUaLmZ2f8ysw1m9qyZHZ9l40VEZGzt9OjvAk4ftuxKYI1z7ihgTfQc4NPAUdG/RcB30mmmiIh0a8ygd879K/DOsMXnACujr1cCn2la/r+d9wtgipkdmlZjRUSkc93W6A9xzr0JED0eHC0/HHi9ab2N0TIREWm2ezc89BC8+27mm0r7ZKzFLHOxK5otMrN1ZrZuy5YtKTdDRNKW17wslffBB/C5z/krpf7qr2DVqsw32e04+rfM7FDn3JtRaWZztHwj8MdN680A3oh7AefcCmAFwJw5c2I/DEQkDHnOy1JZ778PZ5wBjz8+tKyvDy68MPNNd9ujfxBYEH29AHigafnF0eibk4B3GyUeESmvPOdlKaNRj3beeQeOPRb23Xco5D/3Ob8jH3sMJk3KvH1j9ujN7G6gDzjIzDYC/w1YBtxrZpcArwHnRas/ApwBbADeBxZm0GYRyVljXpZGjz7LeVnKpuXRzqZNcNxx8PbbQytfdhnccguMy/cSpjGD3jl3QYtvzYtZ1wFfTtooEQlLWvOy1Ov5zO2Sp+FHO69+91Fqc0/bc6Xrr4drrgGLO42ZPc11IyJtaZ6XpZvArmqdv3G0c/EfVnD74KXw/aZv3nYb/O3fFtW0DynoRaQj3QZ2XJ2/CkFf++YneP/3a/dcuGAB3HVXIe2Jo7luRKQj3Z6YzXP+9VxMmuRLMWubQv6KK8C5oEIeFPQiMooVK+C00/xjQ7eB3ajzL1mSftkm1zH+Zv7fzp1Dy77wBR/wy5bl0IDOqXQjIrFWrIBLL/VfP/qof1y0KNmJ2SzmX8+t9h93InXZMt+LD5x69CIS6/77Wz+v1WDx4jBq7JmO8d+1a6gH3+y++3wPvgQhDwp6EWnhs58d/XkoMqn9v/eeD/e99tpzeb3uA/7cc1PYSH5UuhGRWIsW+cf77/ch33gemnZKSW0PB920CWbMGLn85ZfhiCNSaW8RzF/jVKw5c+a4devWFd0MEamgtmr4/f1wyikjf3jbNpgyJY9mdsXM1jvn5oy1nko3IlJpo9bw77jDl2iGh/zAgC/RBBzynVDQi0ilxdbwL7/cB/yXvrTnyrt3+4CfOLGAlmZHNXoRqbTmGv6Xf/SfOWDuv41cKYASdpYU9CIyqipMRFaba8Q2veIB36CgF5GWSj8RWavZInsk4BtUoxeRlkp7w5G4i5wmTPAB32MhDwp66UG692n7SjcRWVzAn3CCD/cPPiimTQFQ6UZ6SulLETlL64Yjmfrgg/hRMl/9qr+bkyjopbdUdU70LGUxEVkqtmyBgw8eufzOO2Gh7mLaTKUb6SmlK0XISPW6L88MD/l/+RdfolHIj6AevfSUUpQiJN7tt8fflm/DBviTP8m/PSWioJeeE2wpokNVGN/elvnz/afzcO++CwcckH97SkhBL1JCPXFSudUY+MFBGKeqcye0t0RKqEzj2zsezho3RBKGxsAr5DumHr1UQs+UMSKNk8qNHn2oJ5U7OvIY4yrWXnuP06Sgl9KrahljtGAry0nltoaztjFNQVXf47wo6KX0qjg2vp1gazxvlG1C/J1HPfLoYB6aKr7HeVLQS+mFWsZIUmpoJ9jS6OVmXQ6JPfLoYqKxUN/jslDQS+kVXcaIC8ukIdxOsCXt5eZVDqnVoHb8AOy9d/wKbUwyVvR7XHYKeqmEosbGtwrLpCHcTrAl7eXmUg558UU45piRy2fPhqef7uilqnL9QxEU9CIJtArLNEoNYwVb0l5upuWQu+6Kn4rgb/4GvvOdFDeUrqqO7FHQiyTQKizjQjiLEEnSy82kHNLXB48/PnL5vffCeeelsIHsVHlkj4JeKqOI3li7YRlqiMR9UHS1H1udYH3lFZg1q/sG5qjKI3sU9FIJRQZpq7Bsbs+CBfmESNIPu473Y6uA37kT9tqr8wYUqMojexT0Ugmh9caGtweyD5E0Puza3o8VvBdrlUf2KOilEkLrjQ1vz8UX+39ZhkgaH3Zj7scKBnyzqo7sUdBLJYTWG6vVYPlyuP9++Oxnh9qTZbvS+rBbsMA/XnxxU3srHvBVZy7BG2VmlwNfBBzwHLAQOBS4B5gGPAVc5JzbOdrrzJkzx61bt67rdoiEpqhzBklq9LFtnquAD5mZrXfOzRlrva7n+zSzw4GvAnOcc38OjAfOB24CbnbOHQVsAy7pdhsiZVXUNMK1Gixe3N2HSnOb3/+9xYd8Y6pgKZWkEztPAPYxswnAZOBN4FPAquj7K4HPJNyGFKTjecTlQ2W8N+0pcwfYNWg4FPBV03WN3jm3ycz+EXgN+D3wKLAe2O6c2xWtthE4PHErJXehjvsui6TnDLK+JmCP19/vOfjYxzgpbr21Tu97BXQd9GY2FTgHOALYDtwHfDpm1dhugJktAhYBzJw5s9tmSEayHK4Y2mXmWbWn2xEcST5k2/ldGq//9T8so+YWj/j+DiazHzsYPx6W9IfxHkkySUbdzAdecc5tATCzHwNzgSlmNiHq1c8A3oj7YefcCmAF+JOxCdohGchquGJoRwqhtQe6/5Bt93c5/pQDeH/gvZHfuOYa6mcsYd48GB/IMFVJR5Ia/WvASWY22cwMmAc8DzwGnButswB4IFkTpQiN0sOSJemGX2j3Og2tPdB9fb/V79I419K4F+ukYSH/7B2/9PX3JUsye9+lWElq9E+a2Sr8EMpdwNP4HvrDwD1m9j+iZd9Lo6GSvywuHgn9wqai2wPd1/fjfpd63Q+RjHuJb123g0+eOjn2zlXdvu9plsFCK/GVWaJx9GnROPreEtofcGjtSWKP3yXnMfBplsFCLKmFqN1x9LoyVnIX2mXmobUniVqtdcBP3sf5wMxo22mewA9t7qKyU9BLUKrUu85di2kK6msd/f2wpq8cUzCk/Vqi0o0ERIfrXQpoHhrV6POl0o2Ujg7XOxRQwDekWQarUkmtaEmnQBBJTcjTBuQxHURb2/jggw+HSY6Q4zQFmh6jXNSjl2CENtVwQx4lpTG38cwz8PGPx/9wzj34dvaHyi5hUY9egpJk9sWs5HFRVcttXHml773HhXxBE42NtT8aHwTXXusf1esvnoJeSi2PEkIeJaXh21h8VVSeuemmPVc89dTcA374Ph5rf4R4tXGvU+lGSiuvUTpZlJSGlzYa26jNNT8X7HAPPABnn518wx1qtY9H2x8aGhkeBb2UVp6jdNIcAdLqTk6xL//22zBtWjob7kKrfTza/gj1XEsvU9BLaZW15zj8Tk7MjVkpgOtboPt9rKGRYVHQS2ml0XNMa3RIJ6/T1we7BsMbAx9HvfNq0JWx0rNGq/F3EtwdnSsI8CInKa/Mbw4uUnajzd/eyfDAtkaZdHmRUxqjinRxk6h0Iz2rVf2505O8o9axE/Tg0xhVpPmDBBT00sNa1Z87PQE54nVOHARr8afVQYkmjVFFoc0fpCtmi6GgLwH9cWQnbnRINycgazWo7dN6moL6Wtfxe5fGqKKQRibp6KI4CvrA6Y+jGB0ND7z8cli+PPZbk/dxDAzAuJPh1lth0SK/vJ0P7zRGvIQ0aia0o4teoqAPnP44Ataq/j5xIgwMsHQpDFwDu3f7f5ddBh/9qF+l3Q/vNMajhzKmPaSji16jUTeBC3nq3p7VagTNLbf4GvzAAODfq3FNf2GDg/6DOo25YMo4kqZxdLFkiY5M86YefeBCOvTuea168Bs3wuGHj1hcq/lyzWWX+VCfNGnogzpJz7bM5bxQji56jYK+BPTHUbAEQyQXLfLlmuEf1Ek+vFXOk04p6AOjETYBSekq1lYje7p9f1Xrlk4p6ANS5kPySgl8mgKV86RTCvqA6JA8fR0dIY0S8PU69C8NJ1hVzpNOKOgDokPydLV9hDRGD15HWlJ2Gl4ZkCoOPytyGOCowxida3uiMd0aT8pOPfrAVOmQfKyecJonnuNeK/YI6ZVX4Mgj41+kRQ1eR1pSdgp6ycxo5xzSLIe0eq3mk5bnv7WcI+ZeHv8CY5xk1clPKTsFvWRmtJ5wmieeR3ut2pnTqG3bNvKHDjsMNm1qextVOtKS3qMavWRmtHMOaU7tEPtajfr78JC/9Vbfg+8g5ENVxmkQpBi6laAUJosa/eKrWoygefVVmDkz2UZyNNa+0UgggfZvJajSjRQmzXJIba4R+1K7d7cePhmodkJc11xIJ1S6kXIba4hkyUIe2hvOWdVZTVWOyoZ69D2mMnPpBD5NQRLtDOes4kgglaOyo6DvIZ38IWXxgZDKa7YI+Mn7OP/7dNu4gLQb4lUbCaRyVHYU9D2k3T+kLHpWiV+zRcAbvgc/vmLBULUQb4cuTMtOohq9mU0xs1Vm9oKZ/drMamY2zcxWm9lL0ePUtBorybRT163X4brr/E2S0rzkv6tpBEaZpmDCePdhyJsVFwyqKaenilOAhCJpj/4W4GfOuXPNbCIwGbgKWOOcW2ZmVwJXAlck3I6kYKySQKPXPTDgB6uMG5degHbUW9u6FaZPj/9eNJPkxOjoYMIEWLgQLr44/2BQTTl9vXgkk4eug97MDgBOBr4A4JzbCew0s3OAvmi1lUA/CvpgjPaH1Oh1N0J+/nzfu0/jD6+tuvPDD8NZZ8W/QNNJ1lBORKqmLGWRpEd/JLAF+L6ZHQesB74GHOKcexPAOfemmR2cvJmSh+G97rFCPrUTtn/913D33SOXz58Pq1fH/kgIPT/VlKUskgT9BOB44CvOuSfN7BZ8maYtZrYIWAQws0RXLFZZJz3lTssWsevPbTFE8oc/9OEfuHb2V2WGs0qpJQn6jcBG59yT0fNV+KB/y8wOjXrzhwKb437YObcCWAF+CoQE7ZAUtdtT7rRs0bz++783mBuz0uuvw4wZsT8famCOtr9Uw5dQdB30zrn/MLPXzexo59yLwDzg+ejfAmBZ9PhAKi2VoHRatujrg12DLXrwg4P+pEALZQ1M1fAlFElH3XwF+GE04uZlYCF+yOa9ZnYJ8BpwXsJtSIA6OiFqLeahaeMq1ubhnrt3lyswVcOXUCQKeufcM0DczGnzkryulMOYZZ6E0xRkOdyznW0nLRWFMjpIRFfGSkfaCsCU5qHJcrjnaNIsFYUwOkhEQS9tGzMAU55orNPhnmlRbV2qRtMUl1BRl923nMZgrKmCu1TUJfFVnQJYepfuMFUyad9Uu5P6cfO2p+y1g61/2C9+xQD+TyUV6nBOkWa6w1RFpVVW6OYDo1aDtSt+xeyLPgqDMSsEGPDdBrZq61IlKt2UTFplhY5nk/zBD8DMh3yzL34xcYkmK40Ps2uv9Y+aYVJ6lXr0JZPWkL22x3hfcAHcc8/I5Q8/DGecEfsjoZQ9dFJVxCt10IcSKHlLo6ww5gfGtGmwbdvIH9y8ufUUwoR1FasuWBLxShv0IQVKWcV+YLQaIjnGNAUNIfWidcGSiFfaoA8pUPLQzQiZjgIupTHwRfWiW/2+OqkqUuKg76XD8lSmBM74KtaGInrROroTGV1pg76XDsuTTAnccv2UA75Z3r3oXju6E+lUaYMeeuewvJspgVuun2HAdyLNE+m9dHQn0o1SB32v6PToJXb9QAIe0i+19NLRnUg3FPQ5arcXG7dep0cvtRrUTtgJkybFr1DgBU5ZlFp65ehOpBsK+py024tNpbf75ptw2GEjl59+Ovz0p121P00qtYjkS1Mg5KTdKQc6npqg2RNP+BLN8JBfvtz34AMIeShuVkqRXqUefU7a7cV21du9+Wb4xjdGLl+7NtgUValFJD8K+py0e8KwoxOLZ54JjzwycvnWrXDggYnbXBW9OlWGSIPmoy+j6dN9mA+3a5ef1lI+pIuppMranY9eNfoyadzJaXjIN6YJVsiPkOich0hFKOjLIKNb9fUC3RZQRDX6sAV0kVNZ6WIqEQV9mBTwqdIIH+l1Kt2EJK5E86d/qhKNiCSioC+ac/EBf+WV/nsvvVRMu0SkMhT0Rdm1C6ZOHXHXptMmPkZ9rYOlSwtqmIhUjYI+bzt2+N77XnvB9u0fLp45biOGY81gX9BDAOt1/xlUr4++TETCoZOxeRkYgGOOgd/+ds/lv/sd9Wf3Zes8GB/4JF9xFx+BLkgSCZ169FnbscPPRXPkkUMhP3WqT0bnYN99SzPJV9zFR7ogSSR86tFnZft2+Pa3/cyRb7/tu+l33QXz58cOnyzDEMBWE65pymGRsCno07Z5s+/B33orvPeen3jsqqtg7tyiW5ZYq4uPdEGSSNg0qVlaXn8dvvUt+O53fT3+vPNg8WKYPbvololIRbU7qZl69Em99BIsWwY/+IGvuV90EVxxBRx9dNEtExEBFPTde/ZZuPFGuO8+X5y+9FL45jfhIx8pumUiIntQ0HfqF7+AG26Ahx6C/feHv/97uPxyOOSQolu2B91sQ0QaEge9mY0H1gGbnHNnmdkRwD3ANOAp4CLn3M6k2ymUc/Dzn/uAf+wxmDYNrr8eLrvMD5UMjG62ISLN0hhH/zXg103PbwJuds4dBWwDLklhG8XYvRsefBBOOskPi3zhBfinf4JXX4Vrrw0y5EFj20VkT4mC3sxmAGcCd0TPDfgUsCpaZSXwmSTbKMSuXXD33XDccXDOObBlC9x+O7z8sr8J9377Fd3CUelmGyLSLGnpZjnwD8D+0fMDge3OuV3R843A4Qm3kZ+BAT96Ztky+M1v4Nhj/fPzz4cJ5TmdoZttiEizrtPLzM4CNjvn1ptZX2NxzKqxA/XNbBGwCGDmzJndNiMdO3bAHXf4cfCbNsEJJ8CPf+x78+PKOUtEGa60FZF8JOmmfgI428zOAPYGDsD38KeY2YSoVz8DeCPuh51zK4AV4C+YStCO7m3fDrfd5q9k3boVTj4Z7rwT/vIvW9/lSUSkZLrurjrnFjvnZjjnZgHnAz93zn0eeAw4N1ptAfBA4lambcsWuPpqP+b96qvhL/4CnngCHn8cTj1VIS8ilZJFXeIK4BtmtgFfs/9eBtvozsaN8PWv+4BfutSH+lNPwSOPwCc/WXTrREQykcoZRudcP9Afff0ycGIar5uaDRvgpptg5Uo/ZPLCC/2t+o45puiWiYhkrjxDSbrx3HO+5/6jH/k7On3pS/5K1lmzim6ZiEhuqhn0Tz7p56F58EE/5v3v/s5PU3DooUW3TEQkd9UJeuf89AQ33ugHkU+dCtddB1/5ip+yQESkR5U/6J3zE4zdeKOfcOyP/siPh7/0Uj/pmIhIjyt30D/xhJ9Y7Nln/Uia226DhQth772LbpmISDDKHfT77ONn7Vq5Ei64wJ9wFRGRPZQ76OfMgeef1wVOIiKjKOdELs0U8iIioyp/0IuIyKgU9CIiFaegFxGpOAW9iEjFKegDUK/7KXnq9aJbIiJVVO7hlRVQr8O8ef5ygIkT/ewNujOUiKRJPfqC9ff7kB8c9I/9/UW3SESqRkFfsL4+35MfP94/9vUV3SIRqRqVbgpWq/lyTX+/D3mVbUQkbQr6ANRqCngRyY5KNyIiFaegFxGpOAW9iEjFKehFRCpOQS8iUnEKehGRijPnXNFtwMy2AK8W3Y4EDgK2Ft2IgGh/DNG+GKJ9MSStffER59z0sVYKIujLzszWOefmFN2OUGh/DNG+GKJ9MSTvfaHSjYhIxSnoRUQqTkGfjhVFNyAw2h9DtC+GaF8MyXVfqEYvIlJx6tGLiFScgr5DZra3mf3SzP6Pmf27mf33aPkRZvakmb1kZj8ys4lFtzUvZjbezJ42s4ei5z25L8zst2b2nJk9Y2bromXTzGx1tC9Wm9nUotuZFzObYmarzOwFM/u1mdV6cX+Y2dHR/4nGv/9nZl/Pc18o6Ds3AHzKOXccMBs43cxOAm4CbnbOHQVsAy4psI15+xrw66bnvbwvTnHOzW4aOnclsCbaF2ui573iFuBnzrljgOPw/0d6bn84516M/k/MBk4A3gd+Qo77QkHfIef9Lnq6V/TPAZ8CVkXLVwKfKaB5uTOzGcCZwB3Rc6NH90UL5+D3AfTQvjCzA4CTge8BOOd2Oue206P7o8k84DfOuVfJcV8o6LsQlSqeATYDq4HfANudc7uiVTYChxfVvpwtB/4B2B09P5De3RcOeNTM1pvZomjZIc65NwGix4MLa12+jgS2AN+Pynp3mNm+9O7+aDgfuDv6Ord9oaDvgnNuMDoMmwGcCPynuNXybVX+zOwsYLNzbn3z4phVK78vIp9wzh0PfBr4spmdXHSDCjQBOB74jnPu48AOeqBMM5roXNXZwH15b1tBn0B0KNoPnARMMbPGrRlnAG8U1a4cfQI428x+C9yDL9kspzf3Bc65N6LHzfga7InAW2Z2KED0uLm4FuZqI7DROfdk9HwVPvh7dX+A7wA85Zx7K3qe275Q0HfIzKab2ZTo632A+fiTTI8B50arLQAeKKaF+XHOLXbOzXDOzcIfkv7cOfd5enBfmNm+ZrZ/42vgVOBXwIP4fQA9si8AnHP/AbxuZkdHi+YBz9Oj+yNyAUNlG8hxX+iCqQ6Z2cfwJ07G4z8o73XOXW9mR+J7tdOAp4ELnXMDxbU0X2bWB3zTOXdWL+6L6Hf+SfR0AvDPzrkbzOxA4F5gJvAacJ5z7p2CmpkrM5uNP0k/EXgZWEj0N0OP7Q8zmwy8DhzpnHs3Wpbb/w0FvYhIxal0IyJScQp6EZGKU9CLiFScgl5EpOIU9CIiFaegFxGpOAW9iEjFKehFRCru/wMl6mOJxkDjewAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 15\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 20\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHEFJREFUeJzt3XuQHeV55/HvwwgBwsa6QrEoWkGZsp2LwWSKYnDMziIc44SylAApu7xBq2WR4wKDF19AbMjalkEmJkCSzWZLhQm4KgFjWJXAt0KWGWNHA2aEMDE2XmOuCsQS5pJaCzTS6Nk/uk/maObc+/Z29+9TpTpz3uk5806P5nfefvrtt83dERGR6jqk6A6IiEi2FPQiIhWnoBcRqTgFvYhIxSnoRUQqTkEvIlJxCnoRkYpT0IuIVJyCXkSk4uYU3QGAxYsX+/Lly4vuhohIqWzfvv0ld1/Sbbsggn758uVMTEwU3Q0RkVIxs2d72U6lGxGRiusa9GZ2i5ntMrMfNbV90cyeMLPHzGyTmc1v+tw6M3vSzH5qZu/LquMiItKbXkb0twJnz2jbAvymu78T+L/AOgAz+3Xgg8BvxF/zv8xsKLXeiohI37oGvbs/ALw8o+0+d98fP30QWBp/vBK4w933uvvTwJPAqSn2V0RE+pRGjf6/AN+MPz4OeL7pczvjNhERKUiioDez/w7sB/6+0dRis5Z3NjGztWY2YWYTu3fvTtINERHpYOCgN7PVwDnAh336NlU7gV9r2mwp8EKrr3f3je4+7O7DS5Z0nQYqIpKq8XHYsCF6rLqB5tGb2dnAFcB/cPc9TZ+6B/gHM7sB+HfAicAPEvdSRCRF4+OwYgVMTsLcubB1K4yMFN2r7PQyvfJ2YBx4m5ntNLMLgf8JvBnYYmaPmtn/BnD3x4E7gR8D3wIudvepzHovIjKAsbEo5KemosexsaJ7lK2uI3p3/1CL5i912P4a4JoknRIRydLoaDSSb4zoR0eL7lG2glgCQUQkTyMjUblmbCwK+SqXbUBBLyI1NTJS/YBv0Fo3IiIVp6AXEak4Bb2IlE6d5sCnQTV6ESmV0OfAj4+Hd5JXQS8ipdJqDnwogRrqm5BKNyJSKo058END4c2BD/VCLI3oRaRUQp4DH+qFWAp6ESmdUOfAh/ompKAXEUlRiG9CqtGLiFScgl5EpOIU9CIiFaegFxGpOAW9iEjFKehFRCpOQS8iUnEKehGRilPQi4hUnIJeRKTiFPQiIhWnoBcRqTgFvYhIxSnoRUQqTkEvIlJxCnoRkYpT0IuIVJyCXkSk4hT0IiIFGR+HDRuixyzpnrEiIgUYH4cVK2ByEubOjW4qntW9ZjWiFxHJ2/79LLjoPPa8bvzu1DeYnISxsey+nYJeRCQv+/bBH/4hHHoob3/8bgBePGQpc+fC6Gh231ZBLyKStUbAz50LmzZFbatW8eADk/zR59+ZadkGVKMXEcnOvn1w/vmwefN02x/8AXzlK3DooZwGnPae7LuhoBcRSdu+fXDuuXDvvdNt554Ld9wBc/KPXQW9iEha9uyBI488uO288+D22wsJ+IauNXozu8XMdpnZj5raFprZFjP7Wfy4IG43M/srM3vSzB4zs1Oy7LyISBB+9SswOzjkzz8/Gtl/9auFhjz0djL2VuDsGW1XAlvd/URga/wc4P3AifG/tcDfptNNEZEAvfJKFPBvetPB7W+8AXfeWXjAN3QNend/AHh5RvNK4Lb449uAVU3tX/bIg8B8Mzs2rc6KiATh5ZejgF+48OD2N94AdzjssGL61cag0yuPcfcXAeLHo+P244Dnm7bbGbeJiJTfL38ZBfyiRQe379kTZMA3pD2P3lq0ecsNzdaa2YSZTezevTvlbohI2vJalyVIL70UBfzixQe3NwL+iCOK6VePBi0g/cLMjnX3F+PSzK64fSfwa03bLQVeaPUC7r4R2AgwPDzc8s1ARMKQ57osQXnpJViyZHb766/D4Yfn358BDTqivwdYHX+8Gtjc1H5BPPvmNOC1RolHRMprbCwK+akpMl+XJQi7d0cj+Jkh//rr0Qh+RsiHfrTTdURvZrcDo8BiM9sJ/A/gC8CdZnYh8Bxwfrz5N4DfA54E9gBrMuiziORsdDQayTdG9Fmuy1KoXbvgmGNmt7/xRtv6exmOdroGvbt/qM2nVrTY1oGLk3ZKRMIyMhIF2NhYFPKDBtn4ePLXyMSzz8Ly5bPb9+6N0ruDVkc7Qf1s6MpYEenRyMh0gA0S2EGOfJ95Bo4/fnZ7DwHfUIajHQW9iPRl0MAOauT79NNwwgmz2zuUaNpJ62gnSwp6EenLoIEdxMj35z+Ht751dnsfI/hWmo92QqT16EWkrY0b4X3vix4bGoE9NNRfYDdGvuvXp1+26Trr5ckno1k0M0N+795oFk2CkC8DjehFpKWNG+EjH4k+vu++6HHt2mSliixGvh1LST/8IZx88uwvmpyEQw9NtyMBU9CLSEt33z37+dq10cchlSpalpIO3wGntFg8t2YB36DSjYi0dO65nZ+HormUdOqcR1h3lc0O+cnJqERTw5AHjehFpI3G6P3uu6OQbzwPzcgIPHz9d/mNi0dhasYn4xF8sPP3c2LRNU7FGh4e9omJiaK7ISJlc//9cOaZs9v37fu3teCDnL+fEjPb7u7D3bZT6UZEyueee6JZNDNDft++qETTdMOP2q3T04KCXkTKY9OmKOBXrjy4ff/+WQHfMOh00CpRjV5EwnfrrbCmxRqJ+/dHCd5BGa5czZqCXkQ6KvRE5s03w0UXzW7vIeCbhTQdtAgKehFpq7ATmddfD5/61Oz2PgNeIqrRi0hbuZ/I/NM/jWrwM0N+aiqqwSvkB6Kgl9oJ/W5AIcntROanPx0F/DXXHNzeCPhDFFVJqHQjtVLlOdVZyPxE5ic+ATfcMLt9akrhniIFvdRKUGuil0QmJzIvvRT++q9ntx84EI3sJVUKeqmVINZEr7MLL4RbbpndroDPlIJeakVzqgvy3vfCt789u10BnwsFvdROVeZUl2KhrpNOgscem92ugM+Vgl6khII/qfyOd8ATT8xuV8AXQqe1RUoo2IW6FiyIgnxGyG+41hnf5gr5gijopRLqNjc+uIW6zKJ/r756UPP4NmfeEc7VV0dHIEl+P3X7HadJpRspveDLGAPqVIMP5qRyuxF6fJ+LsQ3pTGet6u84Lwp6Kb0qzo3vJdgazxtlm1x/5i4B35DWdNYq/o7zpKCX0gt1bnySWTG9BFsao9y++9hjwDekdeQR6u+4LBT0UnpFlzFahWXSEO4l2JKOcvvqY58B3yyN6axF/47LTkEvlVDU3Ph2YZk0hHsJtqSj3J76mCDg01aV6x+KoKAXSaBdWKZRaugWbElHuR37GFDA56kUF6ENQEEvkkC7sGwVwlmESJJRbss3ipoGPFR7Zo+CXiqjiNFYr6PqUEPk394oahzwDVWe2aOgl0ooMkhbjapn9mf16nxCJK1ZNHOGPNqP49UJu26qPLNHV8ZKJYS2JMDM/kD2V7I23lx6ugq1cSXrDBuudeYMeTD7MU+No7P168M54kqLRvRSCaGNxmb254ILon9ZlpbSmEUzOh7WfsxbVWf2KOilEkKbZz0yAjfdBHffDeeeO92fLPuV1iya1aujxwsuKH4/SjrME5xsMbP/BvxXwIF/AtYAxwJ3AAuBR4A/dvfJTq8zPDzsExMTA/dDJDRFnTOYVaPvI+BDPWEs7ZnZdncf7rbdwDV6MzsOuBQYdvffBIaADwLXATe6+4nAK8CFg34PkbIq6pzByAisWwcjp7euwePediZNaOc5JD1JT8bOAY4wsznAPOBF4EzgrvjztwGrEn4PKYiWhR1cYcsItznJ2ingGxp9PuSQ6CUWLcqmi5K/gYPe3f8ZuB54jijgXwO2A6+6+/54s53AcUk7KfnrawaHzJJ0Bkffb7J9Bnyr12+cVxgaim4E9fGP6/deFQOfjDWzBcBK4HjgVeCrwPtbbNpyGGFma4G1AMuWLRu0G5KRLC8eCe0y86z6M+gMjjQWGxvf5gNdvPXLX0Yhf+BA9S4aqrMks27OAp52990AZvZ/gNOB+WY2Jx7VLwVeaPXF7r4R2AjRydgE/ZAMZDVdMbQTfqH1B5JNk5x3hEc/y4r2P0un1w9tmqqkI0mN/jngNDObZ2YGrAB+DNwPnBdvsxrYnKyLUoSsLh4J7YRfaP2BLvX9DiWaDdd6y59lZpmm0+tX+aKhOht4RO/uD5nZXURTKPcDO4hG6F8H7jCzz8dtX0qjo5K/LC4eCW3EGFp/YPDFxlr9LO2OWDpdc5Dk955mGSy0El+ZJZpHnxbNo6+X0P6AQ+vPQfpcbGzmz7JhQ3RCfWoqGsGvXx9Nv8xCmmWwEEtqIep1Hr2ujJXchXaZeWj9AQZeTXLmz5LnEUuaJ/CrvJJkERT0EpSgR9d5SHm54DyXhkjzTSXEklqZqXQjwaj14XpF1oNXjT5fKt1I6dTycL0iAd+QZhksyJJaSWk9eglGYcsG9CD15SA6rAc/vi38kNfyGOWiEb0EI7SlhhtSLSl1uJJ1xQqYvDr8slUv+0Nll7Ao6CUoIR6up1JS6lKiGdtQnrJVt/1R63MtgVLpRkotjxJCopJSj4uNlals1a2vIV5tXHca0Utp5TVyHKik1GUEP7O0UbayVae+ampkeBT0Ulp5ztLpuaTUwyyaduFZprJVp76G+qZVZwp6Ka2gRo59TJMs0zTSQfdxiG9adaagl9JKY+SYeHbIAPPgg3qD6kKj82rQlbFSW51q/F3fADqsB9/LuQJNP5Q06MpYkS7alVA6nuRtE/BzhjxaIbLHUkyvpY003hD0piIKeqmtdiWUlm8Ap7cv0YyPR3d0CvFuXJrTLqCglxprV39ufgPYP2VwVYsvbip5ZlXHTuOkbWgnfnV0UQwFfQnojyM7rUooIyOw5/X+TrK2K8Uk+d2lcdI2pBO/OroojoI+cPrjyFmKq0k2fnd798Ihh8Df/A2sXTv9uW5vAGkcKYQ0aya0o4s6UdAHTn8cOclgueCxsSjkDxyI/l1yCfzWb0Wf6/XNO4356KHMaQ/p6KJuFPSB0x9HxjJcD350NBrJHzgQPZ+aml73JembdxnLeSEdXdSNgj5w+uPISA43/BgZico1l1wShfphh02/USd58y5zOS+Uo4u6UdCXgP44UpTzHZ3Wro3KNTPfqJO8eaucJ/1S0AemjIfkpVDgLfvazewZ9Percp70S0EfkDIfkgerYvdkBZXzpH8K+oDokDxFKQd8aEdaKudJPxT0AdEheQq6LTY2wEvqSEvKTrcSDEjjkHz9+uqESR63+gPa3rJvzpBjeKJb2unWeFJ2GtEHpkqH5N1GwqmUQzqUaNJabExHWlJ2CnrJTKdzDonLIT2UaNI6aamTn1J2CnrJTKeR8MAnnvtcDz6tI6QqHWlJ/SjoJTOdRsJ9l0NyKNGUTWgzgSRcupWgFKanoOpxmmTVQq/bz6OZQAK6laCUQMdySJ/z4KtUWuklxHXNhfRD0yslLG2mSeJe6qtZ+9HLdM5G6WtoqFrlqtym49aMRvQ1E2yJY8ArWYP9eRLo5fxFFWcCqRyVHQV9jfTzh5RFgLZ8zQQB/+Uvwy23RCPfKgVDryFepXIVqByVJQV9jfT6h5TFyGrma/Z7T9ZWr/XGG9ObVy0YqhbivdCFadlJVKM3s/lmdpeZPWFmPzGzETNbaGZbzOxn8eOCtDoryfRS1x0fh898JroFXpqX/DfeZPZPWeuQ76MG33itxuZmxQWDasrpqeISIKFINL3SzG4DvufuN5vZXGAecBXwsrt/wcyuBBa4+xWdXkfTK/PTqSTTfDPrAwei2+AddlhKf3QZ3HR7chLmzIE1a+CCC/IPBtWUpWiZT680s6OAM4D/DODuk8Ckma0ERuPNbgPGgI5BL/npVBJojJQbIX/WWdHoPlF4ZbAefCgnIlVTlrJIUqM/AdgN/J2ZnQRsBy4DjnH3FwHc/UUzOzp5NyUPM2uk3UK+4wnbNgG/4VqPtk/Y1xBq2KopS1kMXLoxs2HgQeDd7v6Qmf0l8K/Ax9x9ftN2r7j7rDq9ma0F1gIsW7bst5999tmB+iHp6nW2TduyRZuAH9/mlSxz9HIFa9FHHlJdeVwZuxPY6e4Pxc/vAq4EfmFmx8aj+WOBXa2+2N03AhshqtEn6IekqNeR8syyxcjpnUs0YxuSlTlCDcxO+0s1fAnFwLNu3P1fgOfN7G1x0wrgx8A9wOq4bTWwOVEPJUiNsoVj7J/qPosmyZWcjcC8+urosSwzXHTDEglF0nn0HwP+Pp5x8xSwhujN404zuxB4Djg/4feQAI2cbuxp9YkOa9EMcgK1ebrngQPlOumpGr6EIlHQu/ujQKv60IokrysBSzCLpt8TqK2me+YVmGmUikKZHSSiK2OlNxlMk+wmk+mePUizth7C7CARrV4pnbVZTXLeEc74tmzPoTfX9Q87LJ+QB9XWpXoU9CWUy2X3bQJ+zpBjeC4BWNQl8VVdAljqS6WbkkmzrNDvapJF3LKviNKHautSNQr6kknrsvtBVpMsYwAOelJVtXWpEgV9yaQ1Za95NUleb7FBBW7ZpwuWRCKq0ZdMWnXrdVf1dqHTIEJZulcnVUUipR7Rh3pZfNYSjaozniYZ0ihaFyyJREob9CEFSinkNA8+pKV7y3hOQSQLpS3d1O2wvN9ySGP7dtMk0yjRtFLU1MR2+2dkBNatU8hLvZV2RF+nw/J+j17Gx6O1aFpukuGVrFDMKFpHdyKdlTbo63RY3lc5xIoJ+GZ5z8wJqVwkEqLSBj2Ua6pfEj0dvbSpwc87wqMRbpYdHECaJ9LrdHQnMohSB31ddDx66XBHp7Ex2Dpz+wCkXWqp09GdyCAU9Dnq5zZ9M7ebdfTSZRbNCOEGXhallroc3YkMQkGfk15HsV23K2C54LSp1CKSr9JOryybXqeDtt0u52mSWSpqVUqRutKIPie9jmJnbrfuKoOrWmxYsnCfSaUWkfxoRJ+TXkexje32T9nsFSXf+tZSjuCLFsraOyJF0Yg+Rz2NYlvNgz/nHLj33ox6VW26mEpEI/pwvP3ts2vwq1ZFo3eF/MDqtlSGSCsK+qJ96lNRwP/0p9NtX/xiFPCbNhXXr4rQbQFFVLopzic+ATfccHDbli1w1lnF9KeidDGViII+f5dfDjfeeHDb9u1wyinF9KcGNMNH6k5Bn5dHH4V3vevgtkcemd0mIpIy1eiztmNHdFK1OdB37Ihq8E1tmgIoIlnRiD4rO3bAZz8LmzfDW94SfXzppTB//qxNNQVQRLKkEX3aHnkEVq6Mau7f/W4U8M88A3/2Zy1DHso1BbDVkYeORkTCphF9WrZvj0L93nujQP/c56IR/Fve0vVLy7LIV6sjD9DRiEjoFPRJzQz49evhYx/rKeAbyjIFsN2Rh+7uJBI2Bf2gJiaigP/a12DBgoECvlkZpgC2O/Iow9GISJ0p6Pv18MNRwH/961HAf/7zUcAfdVTRPctcuyOPMhyNiNSZeQArIQ4PD/vExETR3eisOeAXLoyubL3kkloEvIiEycy2u/twt+00ou/mBz+IAv4b34gC/pprFPAiUioK+nYeeigK+G9+Mwr4a6+NAv7Nby66ZyIifVHQz9Qc8IsWRRPEL764dAHf643IRaT6Ege9mQ0BE8A/u/s5ZnY8cAewEHgE+GN3n0z6fTL34INRwH/rW6UOeNCVtiJysDSujL0M+EnT8+uAG939ROAV4MIUvkd2xsfh7LOjJHz4YfjCF6IrWa+8spQhD+W60lZEspco6M1sKfD7wM3xcwPOBO6KN7kNWJXke2SmEfCnnx5d9HTddVHAX3EFvOlNRfcuEd1sQ0SaJS3d3AR8GmgMfRcBr7r7/vj5TuC4hN8jXdu2RSWa++6DxYvhz/8cPvrR0od7s7JcaSsi+Rg46M3sHGCXu283s9FGc4tNW07UN7O1wFqAZcuWDdqN3m3bBp/5THQXp4oGfLMyXGkrIvlIMqJ/N/ABM/s94HDgKKIR/nwzmxOP6pcCL7T6YnffCGyE6IKpBP3o7B//MQr4b38bliyJ7sf60Y/CkUdm9i1FREIycI3e3de5+1J3Xw58EPiOu38YuB84L95sNbA5cS8H8f3vw3vfC7/zO/DYY3D99fD00/DJTyrkRaRWsliP/grgcjN7kqhm/6UMvkd73/9+dIPt97xnOuCfeipaskABLyI1lMoFU+4+BozFHz8FnJrG6/ble9+LSjTf+Q4cfTT8xV/An/wJzJuXe1dEREJS/jtMPfBAdHXQGWfA44/DDTdEJZrLL1fIi4hQ9iUQbr0V1qyBY46JAv4jH1G4i4jMUO6gX7UKXnsNLrpIAS8i0ka5g37+fLjssqJ7ISIStPLX6EVEpCMFvYhIxSnoRUQqTkEvIlJxCnoRkYpT0IuIVJyCXkSk4hT0IiIVp6APwPh4dC/y8fGieyIiVVTuK2MrYHw8WpNtcjK6v+vWrbozlIikSyP6go2NRSE/NRU9jo0V3SMRqRoFfcFGR6OR/NBQ9Dg6WnSPRKRqVLop2MhIVK4ZG4tCXmUbEUmbgj4AIyMKeBHJjko3IiIVp6AXEak4Bb2ISMUp6EVEKk5BLyJScQp6EZGKM3cvug+Y2W7g2aL7kcBi4KWiOxEQ7Y9p2hfTtC+mpbUv/r27L+m2URBBX3ZmNuHuw0X3IxTaH9O0L6ZpX0zLe1+odCMiUnEKehGRilPQp2Nj0R0IjPbHNO2LadoX03LdF6rRi4hUnEb0IiIVp6Dvk5kdbmY/MLMfmtnjZvbZuP14M3vIzH5mZl8xs7lF9zUvZjZkZjvM7Gvx81ruCzN7xsz+ycweNbOJuG2hmW2J98UWM1tQdD/zYmbzzewuM3vCzH5iZiN13B9m9rb4/0Tj37+a2cfz3BcK+v7tBc5095OAk4Gzzew04DrgRnc/EXgFuLDAPubtMuAnTc/rvC/+o7uf3DR17kpga7wvtsbP6+IvgW+5+9uBk4j+j9Ruf7j7T+P/EycDvw3sATaR475Q0PfJI/8vfnpo/M+BM4G74vbbgFUFdC93ZrYU+H3g5vi5UdN90cZKon0ANdoXZnYUcAbwJQB3n3T3V6np/miyAvi5uz9LjvtCQT+AuFTxKLAL2AL8HHjV3ffHm+wEjiuqfzm7Cfg0cCB+voj67gsH7jOz7Wa2Nm47xt1fBIgfjy6sd/k6AdgN/F1c1rvZzI6kvvuj4YPA7fHHue0LBf0A3H0qPgxbCpwKvKPVZvn2Kn9mdg6wy923Nze32LTy+yL2bnc/BXg/cLGZnVF0hwo0BzgF+Ft3fxfwK2pQpukkPlf1AeCreX9vBX0C8aHoGHAaMN/MGrdmXAq8UFS/cvRu4ANm9gxwB1HJ5ibquS9w9xfix11ENdhTgV+Y2bEA8eOu4nqYq53ATnd/KH5+F1Hw13V/QDQAeMTdfxE/z21fKOj7ZGZLzGx+/PERwFlEJ5nuB86LN1sNbC6mh/lx93XuvtTdlxMdkn7H3T9MDfeFmR1pZm9ufAz8LvAj4B6ifQA12RcA7v4vwPNm9ra4aQXwY2q6P2IfYrpsAznuC10w1SczeyfRiZMhojfKO939c2Z2AtGodiGwA/hP7r63uJ7my8xGgU+6+zl13Bfxz7wpfjoH+Ad3v8bMFgF3AsuA54Dz3f3lgrqZKzM7megk/VzgKWAN8d8MNdsfZjYPeB44wd1fi9ty+7+hoBcRqTiVbkREKk5BLyJScQp6EZGKU9CLiFScgl5EpOIU9CIiFaegFxGpOAW9iEjF/X9TfCQcC+jFQgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 25\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 30\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 35\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 40\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epochs: 45\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After 50 iterations b = 0.030569950649287983, k = 1.4788903781318357, error = 56.32488184238028\n"
     ]
    }
   ],
   "source": [
    "# error是代价函数的值\n",
    "print(\"Starting b = {0}, k = {1}, error = {2}\".format(b, k, compute_error(b, k, x_data, y_data)))\n",
    "print(\"Running...\")\n",
    "b, k = gradient_descent_runner(x_data, y_data, b, k, lr, epochs)\n",
    "print(\"After {0} iterations b = {1}, k = {2}, error = {3}\".format(epochs, b, k, compute_error(b, k, x_data, y_data)))\n",
    "\n",
    "# 画图\n",
    "# plt.plot(x_data, y_data, 'b.')  # xy以点的形式画出，颜色蓝色\n",
    "# plt.plot(x_data, k*x_data + b, 'r')  # 划线，红色\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "x0, x1 = np.meshgrid([1,2,3], [4,5,6])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [1, 2, 3],\n",
       "       [1, 2, 3]])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4, 4, 4],\n",
       "       [5, 5, 5],\n",
       "       [6, 6, 6]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "(1,4) (2,4) (3,4)\n",
    "(1,5) (2,5) (3,5)\n",
    "(1,6) (2,6) (3,6)"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
